package com.hwd.gmall.seckill;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableScheduling;

/**
 * 秒杀微服务的启动类
 *
 * @author 黄伟东/Victor
 * @date 2022/5/11 13:55
 */
@SpringBootApplication
@EnableDiscoveryClient
@ComponentScan("com.hwd.gmall")
@EnableScheduling
@ServletComponentScan("com.hwd.gmall.seckill.filter")
public class SeckillApplication {

    /**
     * springboot的原理
     * 1、起步依赖：pom.xml
     *      利用父工程引入springboot版本中定义了所有可能使用的版本号
     * 2、自动配置：配置文件进行优化 web.xml spring.xml spring-mybatis.xml
     *
     * @param args args参数（JVM启动参数）进行加载
     */
    public static void main(String[] args) {

        /*
         * 1、创建一个IOC容器
         * 2、在容器中加载启动类，加载启动类的时候利用args参数（JVM启动参数）进行加载
         * 3、SpringBootConfiguration:声明启动类为一个配置类
         * 4、ComponentScan:启动类包扫描，扫描启动类所在的包下所有类的注解
         *      同时扫描启动类所在的包下子包所有类的注解
         * 5、EnableAutoConfiguration：加载所有可能使用到的Bean对象，
         *      依据是pom文件中引入了哪些依赖坐标
         *          spring.factories：通过反射加载类，实例初始化对象，
         * @param args
         */
        SpringApplication.run(SeckillApplication.class, args);
    }
}
